package bit;

/**
 * @author suruomo
 * @date 2020/7/27 17:17
 * @description: 371不使用运算符 + 和 - ，计算两整数 a 、b 之和。
 *
 *计算二进制值相加： 5---101，7---111
 * 第一步：相加各位的值，不算进位，得到010，二进制每位相加就相当于各位做异或操作，101^111。
 * 第二步：计算进位值，得到1010，相当于各位进行与操作得到101，再向左移一位得到1010，(101&111)<<1。
 * 第三步重复上述两步，各位相加 010^1010=1000，进位值为100=(010 & 1010)<<1。
 * 继续重复上述两步：1000^100 = 1100，进位值为0，跳出循环，1100为最终结果。
 * 结束条件：进位为0，即a为最终的求和结果。
 */
public class GetSum {
    /**
     *
     * @param a 不算进位相加值：异或
     * @param b 进位：与操作再左移一位
     * @return
     */
    public int getSum(int a, int b) {
        while(b != 0){
            int temp = a ^ b;
            b = (a & b) << 1;
            a = temp;
        }
        return a;

    }
}
